Shell命令

您所在的位置:网站首页 screen 退出命令 Shell命令

Shell命令

#Shell命令| 来源: 网络整理| 查看: 265

Shell命令 1 变量

定义变量时,变量名不加美元符号$,注意,变量名和等号之间不能有空格

a="myname"

用语句给变量赋值时,

for file in `ls /etc` # 执行这个命令,使用的不是单引号,而是反单引号`,存到临时变量中 或 for file in $(ls /etc) # 将这个命令的执行结果,作为临时变量,用$引用

使用变量

your_name="qinjx" echo $your_name echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界.

在变量和字符紧挨在一起时,必须使用{},才能使解释器区分出来。

推荐给所有变量加上花括号,这是个好的编程习惯。

for skill in Ada Coffe Action Java; do echo "I am good at ${skill}Script" done

已定义的变量,可以被重新定义.

2 Shell 字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号字符串的限制:

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的; 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号:

your_name="runoob" str="Hello, I know you are \"$your_name\"! \n" echo -e $str

双引号的优点:

双引号里可以有变量 双引号里可以出现转义字符

字符串的多种应用

获取字符串的长度

string="abcd" echo ${#string} # 输出 4

提取子字符串,适合于已知子串的起始和终止索引时,以一种闭区间的形式都包含,索引从0开始计数。

string="runoob is a great site" echo ${string:1:4} # 输出 unoo

查找子字符串i或o的位置(哪个先出现就先计算哪个)

string="runoob is a great site" echo `expr index "$string" io` # 输出 4, ``中是命令,返回结果,被echo到控制台 3 数组

bash支持一维数组,不支持多维数组

定义数组

数组名=(值1 值2 ... 值n) a=("a" "b" "c")

访问数组,使用下标.使用 @ 符号可以获取数组中的所有元素。数组的下标可以是不连续的整数或者字符串

${数组名[下标]} # 此时的{}是必须的 valuen=${array_name[n]} echo ${array_name[@]} #!/bin/bash a=("a" "b" "c") echo $a # a echo ${a} # a echo ${a[@]} # a b c echo ${#a} # 1 echo ${#a[@]} # 3 echo ${#a[*]} # 3 echo ${a[1]} # b

获取数组长度

echo ${#a[@]} # 输出数组a的长度 echo ${#a[1]} # 输出a[1]的长度

获取数组的所有键. 通过键遍历数组

#!/bin/bash a=("a" "b" "c") for i in ${!a[@]}; do # 通过加!的方式,获取数组的所有键,循环遍历 echo "${i} =》 ${a[i]}" done # 以下为输出 0 =》 a 1 =》 b 2 =》 c 4 运算符

shell中运算符分为多种:

算术运算符

注意:

1、表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2

2、完整的表达式要被 `` 包含,注意这个字符不是常用的单引号,在 Esc 键下边

3、可以使用加减乘除、取余、赋值、相等、不等运算(共8种) 的运算

4、相等 和 不等运算,要在[]之中,并且不能与[] 相连,返回true or false,常用在if条件中

5、进行乘法运算时,必须使用 \* ,如果使用*,会报错

6、在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "" 。

关系运算符

注意:

1、关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

2、和相等、不等运算符一样,这些关系运算符也是需要在[]中使用,并且不能和[] 相连。

3、不要使用 >,>=,之类的符号

布尔运算符(与或非)

注意:

1、和相等、不等运算符一样,这些关系运算符也是需要在[]中使用,并且不能和[] 相连

2、适用于多个条件的组合的情况

3、可以用逻辑运算符代替

字符串运算符

1、=和==在判断字符串是否相同上,是相同的

2、最好使用 [ $a ] 来判断变量a是否为null或者空字符串(""),不要使用 -z ,可能不准确

文件测试运算符

用于检测Unix文件的各种属性,属性检测描述如下表

常用的有 :

-d : 文件夹/目录 dir -f : 普通文件 file(既不是文件夹/目录,也不是设备文件) -r : read 检测文件是否可读,如果是,则返回 true -w : write 检测文件是否可写,如果是,则返回 true -x : 检测文件是否可执行,如果是,则返回 true -s : 检测文件是否为空(文件大小是否大于0),不为空返回 true -e : exist 检测文件(包括目录)是否存在,如果是,则返回 true 4.1 算术运算符

注意:原生的bash不支持简单的数学运算,但是可以通过其他命令来实现,例如awk和expr最常用。

expr 是一款表达式计算工具,使用它能完成表达式求值的操作

#!/bin/bash # 算数运算符 即符号两边都为数字,或者可以解析为数字 echo `expr 2 + 2` # 4 # 变量代表的数字也可以 a=3 b=4 echo `expr $a + $b` # 7 # 也可以执行 c='4' d=5 echo `expr $c + $d` # 9 c='55' d="54" echo `expr $c + $d` # 109 c='5a5' d="54a" echo `expr $c + $d` # 报错 expr: non-integer argument #!/bin/bash # 算数运算符 即符号两边都为数字,或者可以解析为数字 # echo `expr 2 * 2` # expr: syntax error: unexpected argument ‘run’ echo `expr 2 \* 4` 运算符 说明 举例 + 加法 expr $a + $b 结果为 30。 - 减法 expr $a - $b 结果为 -10。 * 乘法 expr $a \* $b 结果为 200。 / 除法 expr $b / $a 结果为 2。 % 取余 expr $b % $a 结果为 0。 = 赋值 a=$b 把变量 b 的值赋给 a。 == 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。 != 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。 4.2 关系运算符 运算符 说明 举例 -eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。 -ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。 -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。 -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。 4.3 布尔运算符 运算符 说明 举例 ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。 -o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。 -a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

a是and的简写,o是or的简写,!是非

逻辑运算符

运算符 说明 举例 && 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false || 逻辑的 OR [[ $a -lt 100 4.4 字符串运算符 #!/bin/bash a="aaa" b="bbb" if [ $a != $b ] then echo 1 # 输出1 证明 != 可以用于判断字符串是否相同的情况, == 同理 fi

下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":

运算符 说明 举例 = 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。 != 检测两个字符串是否不相等,不相等返回 true。 [ $a != $b ] 返回 true。 -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。 -n 检测字符串长度是否不为 0,不为 0 返回 true。 [ -n "$a" ] 返回 true。 $ 检测字符串是否不为空,不为空返回 true。 [ $a ] 返回 true。 #!/bin/bash # 关于 -z 的测试 # test1 a="" b="sdf" if [ -z $a ] then echo "a is zero" # 输出这个,证明空字符串的长度为0 else echo "a is not zero" fi if [ -z $b ] then echo "b is zero" else echo "b is not zero" # 输出这个,证明b的长度不为0 fi # test2 # a 未赋值的情况 #!/bin/bash a= b="sdf" if [ -z $a ] then echo "a is zero" # 输出这个 else echo "a is not zero" fi if [ -n $a ] then echo "a is not zero" # 输出这个 else echo "a is zero" fi # 输出 证明最好不要这样做,会产生不可控的风险。 a is zero a is not zero #!/bin/bash # 关于字符串判断是否为null的问题 a="22" b="sdf" if [ $a ] then echo "a is not null" # 输出这个 else echo "a is null" fi # 分别用未赋值、""、"111"测试 # a is null # a is null # a is not null # 所以最好使用 $a 来判断字符串是否为空 4.5 文件测试运算符 操作符 说明 举例 -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。 -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。 -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。 -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。 -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。 -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。 -p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。 -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。 -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。 -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。 -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。 -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。 -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3